package com.example.demo4.spring.context;

import com.example.demo4.support.BeanDefinitionReader;
import com.example.demo4.support.BeanDefinitionRegistry;

import java.util.HashMap;
import java.util.Map;

/**
 * ApplicationContext接口的 子实现类
 * 创建容器对象时,加载配置文件,对bean进行初始化
 */
public abstract class AbstractApplicationContext implements ApplicationContext {

    //声明解析器变量
    protected BeanDefinitionReader beanDefinitionReader;

    // 定义存储bean对象的 Map集合
    protected Map<String, Object> singletonObject = new HashMap<>();


    //声明配置文件类路径的变量
    protected String configLocation;

    @Override
    public void refresh() {

        //加载beanDefinition对象

        try {
            beanDefinitionReader.loadBeanDefinitions(configLocation);
            //初始化bean
            finishBeanInitialization();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected void finishBeanInitialization() throws Exception {

        //获取注册表里面所有的对象
        BeanDefinitionRegistry registry = beanDefinitionReader.getRegistry();

        String[] definitionNames = registry.getBeanDefinitionNames();
        for (String definitionName : definitionNames) {
            //进行bean的初始化
            getBean(definitionName);
        }

    }
}
